perm filename LEVEL2.SAI[4,ALS] blob
sn#202977 filedate 1976-02-23 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "LEVEL2"
C00010 ENDMK
C⊗;
BEGIN "LEVEL2"
DEFINE ⊂="COMMENT"; ⊂ 8/16/73 FIRST DRAFT;
PROCEDURE LEVEL2;
BEGIN "LEV"
⊂ This procedure accumulates statistics on adjacency probabilities
for segment types during the training stage and uses these apriori
values to modify the individual estimates during use;
⊂ Probabilities are expressed in parts per 512;
EXTERNAL STRING NU;
EXTERNAL INTEGER N,CFLAG,SEGC,FLAG;
DEFINE TABNUM="16";
EXTERNAL INTEGER ARRAY NAMES,CMAX,OUT1,OUT2,OUT3,OUT4[0:TABNUM];
EXTERNAL INTEGER ARRAY HINTS[0:31];
INTEGER I,J,K,L,M,Q;
INTEGER BSTCNT,BSTHNT;
INTEGER ARRAY HINT2,DUR2,SEGC2,TMP,CNT[0:31];
INTEGER ARRAY CMAX2[0:16,0:31];
INTEGER ARRAY BESTN,BESTP[0:7,0:31]; ⊂ Names and prob.values for the
n best choices, kept ordered by sort after the initial merge;
INTEGER ARRAY CONTEX[0:63,0:63]; ⊂ Sums accumulated in right half
and adjacency conditional probabilities in 2 fields in left half;
INTEGER ARRAY PROB[0:63]; ⊂ The a priori probabilities of features;
PROCEDURE MERGE;
BEGIN "MERGE" ⊂ used to keep values ordered as they are accumulated;
INTEGER K;
BESTP[7,N]←J; BESTN[7,N]←L;
FOR K←7 STEP -1 UNTIL 1 DO IF BESTP[K,N]> BESTP[K-1,N] THEN BEGIN
L←BESTN[K-1,N]; BESTN[K-1,N]←BESTN[K,N]; BESTN[K,N]←L;
J←BESTP[K-1,N]; BESTP[K-1,N]←BESTP[K,N]; BESTP[K,N]←J; END
ELSE DONE;
END "MERGE";
PROCEDURE SORT;
BEGIN "SORT" ⊂ used to reorder values after adjacency corrections;
INTEGER I,J,K;
FOR I←0 STEP 1 UNTIL 6 DO
FOR J←I+1 STEP 1 UNTIL 7 DO IF BESTP[I,N]< BESTP[J,N] THEN BEGIN
K←BESTN[I,N]; BESTN[I,N]←BESTN[J,N]; BESTN[J,N]←K;
K←BESTP[I,N]; BESTP[I,N]←BESTP[J,N]; BESTP[J,N]←K; END;
END "SORT";
PROCEDURE SETUP;
BEGIN "SETUP" ⊂ computes direct and adjacency probabilities;
INTEGER I,J,K,ISUM,JSUM,SUM;
SUM←0;
FOR I←0 STEP 1 UNTIL 63 DO SUM←SUM+PROB[I] LAND '777777;
FOR I←0 STEP 1 UNTIL 63 DO BEGIN
J←PROB[I] LAND '777777; K←J*512%SUM; IF K>511 THEN K←511;
PROB[I]←J+(K LSH 27); END;
FOR I←0 STEP 1 UNTIL 63 DO BEGIN
JSUM←0;
FOR J←0 STEP 1 UNTIL 63 DO JSUM←JSUM+CONTEX[I,J] LAND '777777;
FOR J←0 STEP 1 UNTIL 63 DO BEGIN
K←((CONTEX[I,J] LAND '777777)*512)%JSUM;
IF K>511 THEN K←511;
CONTEX[I,J]←(CONTEX[I,J] LAND '777777777)+(K LSH 27);
END;
END;
FOR J←0 STEP 1 UNTIL 63 DO BEGIN
ISUM←0;
FOR I←0 STEP 1 UNTIL 63 DO ISUM←CONTEX[I,J] LAND '777777;
FOR I←0 STEP 1 UNTIL 63 DO BEGIN
K←((CONTEX[I,J] LAND '777777)*512)%ISUM;
IF K>511 THEN K←511;
CONTEX[I,J]←( CONTEX[I,J] LAND '777000777777)+(K LAND 18);
END;
END;
END "SETUP";
IF CFLAG≠0 THEN BEGIN "CFLAG" ⊂ to proceess another segment;
FOR J←0 STEP 1 UNTIL 7 DO BESTP[J,N]←0;
SEGC2[N]←SEGC; DUR2[N]←SEGC2[N]-SEGC2[N-1];
FOR I←0 STEP 1 UNTIL TABNUM-1 DO BEGIN
IF NAMES[I]=0 THEN DONE;
FOR J←0 STEP 1 UNTIL 7 DO BEGIN
IF (J←LDB(POINT(9,CMAX[I],8)))>BESTP[7,N] THEN BEGIN
L←OUT1[I]; MERGE; END;
IF (J←LDB(POINT(9,CMAX[I],17)))>BESTP[7,N] THEN BEGIN
L←OUT2[I]; MERGE; END;
IF (J←LDB(POINT(9,CMAX[I],26)))>BESTP[7,N] THEN BEGIN
L←OUT3[I]; MERGE; END;
IF (J←LDB(POINT(9,CMAX[I],35)))>BESTP[7,N] THEN BEGIN
L←OUT4[I]; MERGE; END;
END;
END;
IF FLAG=-1 THEN BEGIN "FLAG-1"
L←0; TMP[L]←HINTS[DUR2[N]];
FOR J← DUR2[N] STEP -1 UNTIL 0 DO
IF HINTS[J]=TMP[L] THEN CNT[L]←CNT[L]+1 ELSE BEGIN
L←L+1; CNT[L]←1; TMP[L]←HINTS[J]; END;
BSTHNT←BSTCNT←0;
FOR J←L STEP -1 UNTIL 0 DO
IF CNT[J]>BSTCNT THEN BEGIN BSTCNT←CNT[J]; BSTHNT←TMP[J]; END;
HINT2[N]←BSTHNT;
J←HINTS[N-1]; K←BSTHNT; PROB[K]←PROB[K]+1;
CONTEX[J,K]←CONTEX[J,K]+1;
END "FLAG-1";
IF FLAG=1 THEN IF N>1 THEN BEGIN "FLAG1" ⊂ correct for context;
FOR I←0 STEP 1 UNTIL 7 DO BEGIN
K←BESTN[I,N-1];
Q←LDB(POINT(9,PROB[K],8));
FOR J←0 STEP 1 UNTIL 7 DO BEGIN ⊂ backward adjustment;
L←BESTN[J,N];
M←LDB(POINT(9,CONTEX[K,L],8));
BESTP[I,N-1]← BESTP[I,N-1]+
((1-BESTP[I,N-1])*(((M*BESTP[J,N]) LSH -9)-Q) LSH -9);
END; END; SORT;
FOR J←0 STEP 1 UNTIL 7 DO BEGIN
L←BESTN[J,N];
Q←LDB(POINT(9,PROB[L],17));
FOR I←0 STEP 1 UNTIL 7 DO BEGIN ⊂ forward adjustment;
K←BESTN[I,N-1];
M←LDB(POINT(9,CONTEX[K,L],17));
BESTP[J,N]←BESTP[J,N]+
((1-BESTP[J,N])*(((M*BESTP[I,N-1]) LSH -9)-Q) LSH -9);
END; END; SORT;
END "FLAG1";
N←N+1;
END "CFLAG";
END "LEV";
END "LEVEL2";
⊂ ************I;
⊂ PUT IN SAY ;
⊂ AT 401/2;
⊂ HINTS[HCNT]←J;
⊂ HCNT←HCNT+1;